MyBatis比较方便,而且公司采用MyBatis做数据持久化的比较多,在Spring+SpringMVC中整合MyBatis步骤还是有点复杂的,要配置多个Bean,Spring Boot中对此做了进一步的简化,使MyBatis基本上可以做到开箱即用,本文就来看看在Spring Boot中MyBatis要如何使用。
   1、工程创建
       创建一个基本的Spring Boot工程,添加Web依赖,MyBatis依赖以及MySQL驱动依赖,如下图:
 
      
     创建成功后,添加Druid依赖,并且锁定MySQL驱动版本,完整的依赖如下:
|      <dependencies><dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>2.1.0</version>
 </dependency>
 
 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>druid-spring-boot-starter</artifactId>
 <version>1.1.10</version>
 </dependency>
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <scope>runtime</scope>
 <version>5.1.27</version>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>
 
 
 | 
 2、基本用法
      首先也是在application.properties中配置数据库的基本信息:
| spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.one.username=root
 spring.datasource.one.password=123456
 spring.datasource.one.url=jdbc:mysql:
 
 | 
接下来创建Bean:
| package org.test.bean;
 
 public class User {
 private Integer id;
 private String username;
 private String address;
 
 public Integer getId() {
 return id;
 }
 
 public void setId(Integer id) {
 this.id = id;
 }
 
 public String getUsername() {
 return username;
 }
 
 public void setUsername(String username) {
 this.username = username;
 }
 
 public String getAddress() {
 return address;
 }
 
 public void setAddress(String address) {
 this.address = address;
 }
 
 @Override
 public String toString() {
 return "User{" +
 "id=" + id +
 ", username='" + username + '\'' +
 ", address='" + address + '\'' +
 '}';
 }
 }
 
 | 
  创建Mapper,如下:
| package org.test.mapper;
 import org.test.bean.User;
 
 import java.util.List;
 
 
 public interface UserMapper {
 List<User> getAllUser();
 }
 
 | 
   创建UserMapper.xml文件(数据库名为test,表名为user,添加bean的字段即可,此处省略创建数据库),如下:
| <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.test.mapper.UserMapper">
 <select id="getAllUser" resultType="org.javaboy.bean.User">
 select * from user;
 </select>
 </mapper>
 
 | 
   将UserMapper.xml文件放在mapper文件夹下,如图:
 
     
放在这里的UserMapper.xml会被自动扫描到,但是有另外一个Maven带来的问题,就是java目录下的xml资源在项目打包时会被忽略掉,所以,如果UserMapper.xml放在包下,需要在pom.xml文件中再添加如下配置,避免打包时java目录下的XML文件被自动忽略掉:
| <build><resources>
 <resource>
 <directory>src/main/java</directory>
 <includes>
 <include>**/*.xml</include>
 </includes>
 </resource>
 <resource>
 <directory>src/main/resources</directory>
 </resource>
 </resources>
 </build>
 
 | 
     当然,UserMapper.xml也可以直接放在resources目录下,这样就不用担心打包时被忽略了,但是放在resources目录下,又不能自动被扫描到,需要添加额外配置。例如我在resources目录下创建mapper目录用来放mapper文件,如下:
 
           
  此时在application.properties中告诉mybatis去哪里扫描mapper:
| mybatis.mapper-locations=classpath:mapper/*.xml
 | 
  如此配置之后,mapper就可以正常使用了。注意第二种方式不需要在pom.xml文件中配置文件过滤。
  接下来创建单元测试类如下:
| package org.test;
 import org.test.bean.User;
 import org.test.mapper.UserMapper;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.List;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
 public class DemoApplicationTests {
 
 @Autowired
 UserMapper userMapper;
 @Test
 public void contextLoads() {
 List<User> allUser = userMapper.getAllUser();
 System.out.println(allUser);
 }
 
 
 }
 
 | 
   运行测试类,我们可以看到控制台打印出了User信息,至此,测试成功。
